package com.wei.czz.framework.common.service;

import java.util.List;
import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2023-02-28 14:15:18
 * className: AesService AES加解密服务接口
 * version: 1.0
 * description:
 */
public interface AesService {

    /**
     * 加密操作
     * @param plainText  明文
     * @param secretKey  密钥
     * @param ivValue    偏移量
     * @param cipherType 密文类型【true-16进制密文 false-Base64密文】
     * @return 密文
     */
    String encrypt(String plainText, String secretKey, String ivValue, boolean cipherType);

    /**
     * 解密操作
     * @param cipherText 密文
     * @param secretKey  密钥
     * @param ivValue    偏移量
     * @param cipherType 密文类型【true-16进制密文 false-Base64密文】
     * @return 明文
     */
    String decrypt(String cipherText, String secretKey, String ivValue, boolean cipherType);

    /**
     * 加密
     * @param plainText 明文
     * @return 16进制密文
     */
    String encryptToHex(String plainText);

    /**
     * 解密
     * @param cipherText 16进制密文
     * @return 明文
     */
    String decodeHex(String cipherText);

    /**
     * 半解密
     * @param cipherText 16进制密文
     * @return 脱敏后明文
     */
    String subDecodeHex(String cipherText);

    /**
     * 加密
     * @param plainText 明文
     * @return Base64密文
     */
    String encryptToBase64(String plainText);

    /**
     * 解密
     * @param cipherText Base64密文
     * @return 明文
     */
    String decodeBase64(String cipherText);

    /**
     * 半解密
     * @param cipherText Base64密文
     * @return 脱敏后明文
     */
    String subDecodeBase64(String cipherText);

    /**
     * 项目内部自用加密操作
     * @param plainText 明文
     * @return 16进制密文
     */
    String czzEncrypt(String plainText);

    /**
     * 项目内部自用加密操作
     * @param plainTextList 明文列表
     * @return 密文映射对象
     */
    Map<String, String> czzEncrypt(List<String> plainTextList);

    /**
     * 项目内部自用解密操作
     * @param cipherText 16进制密文
     * @return 明文
     */
    String czzDecrypt(String cipherText);

    /**
     * 项目内部自用解密操作
     * @param cipherTextList 16进制密文列表
     * @return 明文映射对象
     */
    Map<String, String> czzDecrypt(List<String> cipherTextList);

}
